<?php

class Warehouse_IndexController extends Zend_Controller_Action
{
	protected $_object;
	
	public function init()
	{
		//tạo đối tượng
		$this->_object = new Admin_Model_Warehouse ();
		
		//lấy tiêu đề 
		$this->_helper->common->setCaptions ();
	}

	public function detailAction()
	{
		//lấy tham số
		$request = $this->_request;
		$id = $request->getParam ( 'id' );
		
		//lấy đối tượng cần cập nhật
		$this->_object->findBase ( $id );
		
		//tạo form
		$form = new Warehouse_Form_Warehouse_Detail ( $this );
		
		//đổ dữ liệu vào form 
		$form->populate ( $this->_object->toArray () );
		
		//truyền dữ liệu ra view
		$this->view->form = $form;
	}
	
	//xem danh sách tất cả 
	public function indexAction()
	{
		//lấy tham số
		$request=$this->_request;
		$warehouse_status=$request->getParam('warehouse_status','');
		$warehouse_code=$request->getParam('warehouse_code','');
		$warehouse_name=$request->getParam('warehouse_name','');
		
		//các cột cần lấy dữ liệu
		$select=" 
		SELECT
			`warehouse_id`
			, `warehouse_code`
			, `warehouse_name`
			, `warehouse_address`
			, `warehouse_phone`
			, `warehouse_area`
			, `warehouse_temperature`
			, `warehouse_contain`
			, `warehouse_manage_user`
			, `warehouse_note`
			, `warehouse_order`
			, `warehouse_status`
			, `account_fullname`
			, `warehouse_warehouse_group_code`
			, `warehouse_group_name`
		FROM tbl_warehouse
			LEFT JOIN tbl_account ON account_username = warehouse_manage_user 
			LEFT JOIN tbl_warehouse_group ON warehouse_warehouse_group_code = warehouse_group_code	
		";
		
		//thiết lập điều kiện lấy dữ liệu
		$where=" WHERE 1 ";
		if($warehouse_status!='')
			$where .= " AND `warehouse_status` = '$warehouse_status' ";
		if($warehouse_code!='')
			$where .= " AND `warehouse_code` LIKE '%$warehouse_code%' ";
		if($warehouse_name!='')
			$where .= " AND `warehouse_name` LIKE '%$warehouse_name%' ";

		//thiết lập thứ tự lấy dữ liệu
		$order=$this->_helper->common->getOrderString(array('warehouse_order ASC'), array('warehouse_group_code ASC'));
		
		//lấy dữ liệu
		$query=$select.$where.$order;
		$data = $this->_object->queryBase ( $query );
		
		//phân trang
		$this->_helper->common->paginate ( $data );
		
		//truyền dữ liệu ra view
		$this->view->warehouse_status=$warehouse_status;
		$this->view->warehouse_code=$warehouse_code;
		$this->view->warehouse_name=$warehouse_name;
	}
	
	//kích hoạt/ vô hiệu hóa 1 hoặc nhiều dòng
	public function publishAction()
	{
		$this->_helper->action->publish ( $this->_object, 'warehouse_status' );
	}
	
	//lưu thứ tự sắp xếp của các dòng
	public function saveOrderAction()
	{
		$this->_helper->action->saveOrder ( $this->_object, 'warehouse_order' );
	}
	
	//xóa 1 hoặc nhiều dòng
	public function deleteAction()
	{
		$this->_helper->action->delete ( $this->_object, 'afterDelete', 'beforeDelete');
	}
	
	//hàm kiểm tra dữ liệu ràng buộc trước khi xóa
	//nếu trả về true thì cho xóa, ngược lại kg cho xóa
	public function beforeDelete()
	{
		$request = Zend_Controller_Front::getInstance ()->getRequest ();
		$ids = (array)$request->getParam ( 'id');
		$msg = "";
		foreach ($ids as $id)
		{
			//Lay nhom kho
			$warehouse = new Admin_Model_Warehouse();
			$warehouse->findBase ( $id );
			
				//Kiem tra xem co nam trong phieu xuat/nhap kho tbl_inbound...
			$inbound = new Admin_Model_TmpInbound();
			if ($inbound->fetchRowAllBase ( "inbound_warehouse_code = '{$warehouse->warehouse_code}' " ) !== FALSE)
			{
				$msg .= " - Phiếu nhập/xuất kho có mã số: <strong>{$inbound->inbound_code}</strong>";
				break;
			}
			
				//Kiem tra xem co nam trong vi tri luu kho tbl_location...
			$location = new Admin_Model_Location();
			if ($location->fetchRowAllBase ( "location_warehouse_code = '{$warehouse->warehouse_code}' " ) !== FALSE)
			{
				$msg .= " - Vị trí lưu kho có mã số: <strong>{$location->location_code}</strong>";
				break;
			}
		}				
		if($msg!="")
		{
			$msg = "Dữ liệu này đã có trong:<br />".$msg;
			$this->_helper->flashMessenger ( $msg );
			return false;
		}
		return true;
	}
	
	//hàm giải phóng dữ liệu liên quan sau khi xóa
	public function afterDelete()
	{
		
	}
	
	//thêm 1 dòng
	public function insertAction()
	{
		//lấy tham số, khai bao bien
		$request=$this->_request;
		
		//tạo form
		$form = new Warehouse_Form_Warehouse_Insert($this);
		
		//do du lieu vào hop chon thuoc nhóm kho nào
		/*$warehouse_group=new Admin_Model_WarehouseGroup();
		$warehouse_groups=$warehouse_group->fetchAllBase(null,"warehouse_group_name ASC");
		$warehouse_groups=$warehouse_group->toArray2($warehouse_groups,"warehouse_group_code","warehouse_group_name");
		$form->warehouse_warehouse_group_code->setMultiOptions(array(""=>"- Chọn -")+$warehouse_groups);*/
		
		//do du lieu nguoi quan ly kho
		$account=new Admin_Model_Account();
		$accounts=$account->fetchAllBase(null,"account_username ASC");
		$form->warehouse_manage_user->setMultiOptions(array(""=>"- Chọn -")+$account->toArray2($accounts,"account_username","\$row->account_username - \$row->account_fullname"));
		
		//phần xử lí chính
		if ($request->isPost ())//khi post giá trị
		{
			if ($form->isValid ( $request->getPost () ))//khi giá trị trong form đã được kiểm tra thành công
			{
				$adminAction = $form->getValue('adminAction');
				$warehouse = new Admin_Model_Warehouse ( $form->getValues () );
				
				//kiểm tra có trùng code không?
				$exist = $this->_object->countBase("`warehouse_code`='{$warehouse->warehouse_code}'",0)>0;
				
				//nếu trùng mã báo lỗi
				if($exist)
				{
					$form->getElement ( 'warehouse_code' )->addError ( $this->_helper->common->getCaption('warehouse_code').' đã tồn tại.' );
					$form->markAsError();
				}
				
				//nếu form không có lỗi
				if (!$form->isErrors())
				{
					try
					{
						//insert dòng mới
						$warehouse -> insertBase();
						
						//thông báo + chuyển hướng trang khi thành công				
						$this->_helper->flashMessenger ( 'Thêm thành công.' );
						if ($adminAction == 'save-and-close') 
						{
							$this->_helper->redirector ( 'index', 'index', 'warehouse', array() );
						}
						else if ($adminAction == 'save-and-new') 
						{
							$this->_helper->redirector ( 'insert', 'index', 'warehouse', array() );
						}
					}
					catch(Exception $e)
					{
						
					}
				}
			}
		}
		else//khi vào form lần đầu tiên
		{
		
		}
		
		//truyền dữ liệu ra view
		$this->view->form=$form;
	}
	
	//cập nhật 1 dòng
	public function updateAction()
	{
		//lấy tham số, khai bao bien
		$request=$this->_request;
		$id=$request->getParam('id');
		if(is_array($id))
			$id=$id[count($id)-1];
				
		//lấy đối tượng cần cập nhật
		$first_warehouse=new Admin_Model_Warehouse ( ); 
		$first_warehouse->findBase($id);
		
		//tạo form
		$form = new Warehouse_Form_Warehouse_Update($this);
		
		//do du lieu vào hop chon thuoc nhóm kho nào
		/*$warehouse_group=new Admin_Model_WarehouseGroup();
		$warehouse_groups=$warehouse_group->fetchAllBase(null,"warehouse_group_name ASC");
		$warehouse_groups=$warehouse_group->toArray2($warehouse_groups,"warehouse_group_code","warehouse_group_name");
		$form->warehouse_warehouse_group_code->setMultiOptions(array(""=>"- Chọn -")+$warehouse_groups);		*/
		
		//lay thong tin nguoi giu kho
		$account=new Admin_Model_Account();
		$accounts=$account->fetchAllBase(null,"account_username ASC");
		$form->warehouse_manage_user->setMultiOptions(array(""=>"- Chọn -")+$account->toArray2($accounts,"account_username","\$row->account_username - \$row->account_fullname"));
		
		//phần xử lí chính
		if ($request->isPost ())//khi post giá trị
		{
			if ($form->isValid ( $request->getPost () ))//khi giá trị trong form đã được kiểm tra thành công
			{
				$adminAction = $form->getValue('adminAction');
				$warehouse = new Admin_Model_Warehouse ( $form->getValues () );
				
				//kiểm tra có trùng code không?
				$exist = $this->_object->countBase("`warehouse_code`='{$warehouse->warehouse_code}' AND warehouse_id<>$id ",0)>0;
				
				//nếu trùng mã báo lỗi
				if($exist)
				{
					$form->getElement ( 'warehouse_code' )->addError ( $this->_helper->common->getCaption('warehouse_code').' đã tồn tại.' );
					$form->markAsError();
				}
				
				//nếu form không có lỗi
				if (!$form->isErrors())
				{
					try
					{
						//update dữ liệu
						$warehouse -> updateBase($id);
						
						//thông báo + chuyển hướng trang khi thành công				
						$this->_helper->flashMessenger ( 'Cập nhật thành công.' );
						if ($adminAction == 'apply') 
						{
							$this->_helper->redirector ( 'update', 'index', 'warehouse', array('id'=>$id) );
						}
						else if ($adminAction == 'save-and-close') 
						{
							$this->_helper->redirector ( 'index', 'index', 'warehouse', array() );
						}
						else if ($adminAction == 'save-and-new') 
						{
							$this->_helper->redirector ( 'insert', 'index', 'warehouse', array() );
						}
					}
					catch(Exception $e)
					{
						
					}
				}
			}
		}
		else//khi vào form lần đầu tiên
		{
			$form->populate($first_warehouse->toArray());
		}		
		
		//truyền dữ liệu ra view
		$this->view->form=$form;
	}
}